var gulp = require('gulp'); // gulp
var uglify = require('gulp-uglify');  // 用来压缩js
var concat = require('gulp-concat');  // 用来合并文件
var less = require('gulp-less');  // 编译less
var cssBase64 = require('gulp-css-base64'); // 把css中的图片转为base64
var LessAutoprefix = require('less-plugin-autoprefix'); // 补全兼容的css样式

var autoprefix = new LessAutoprefix({ browsers: ["iOS >= 8", "Firefox >= 20", "Android > 4.4", "ie >= 8"] });

var rename = require('gulp-rename');  // 重命名文件
var imagemin = require('gulp-imagemin');  // 压缩图片
var cleanCSS = require('gulp-clean-css'); // 压缩css
var rimraf = require('gulp-rimraf');  // 删除文件夹
var connect = require('gulp-connect');  // web服务
var rev = require('gulp-rev');  // 给静态文件名添加hash值，防止缓存
var revCollector = require('gulp-rev-collector');  // 给html注入带hash值的静态文件

/*启动一个web服务*/
gulp.task('connect', function () {
  connect.server({
    root: './dist',
    port: '8001',
    host: '0.0.0.0',
    livereload: true
  })
});

/*合并js任务,开发时使用*/
gulp.task('script:dev', function () {
  gulp.src(['./src/js/lib/**/*.js','./src/js/common.js','./src/js/**/*.js'])
    .pipe(concat('main.js'))
    .pipe(gulp.dest('./dist/js/'))
    .pipe(connect.reload());
});

/*合并压缩js任务,构建时使用*/
gulp.task('script:build', function () {
  gulp.src(['./src/js/lib/**/*.js','./src/js/common.js','./src/js/**/*.js'])
    .pipe(concat('main.js'))
    .pipe(gulp.dest('./dist/js/'))
    .pipe(uglify())
    .pipe(rev()) //给文件添加hash编码
    .pipe(gulp.dest('./dist/js/'))
    .pipe(rev.manifest()) //生成rev-mainfest.json文件作为记录
    .pipe(gulp.dest('./rev/js'));
});


/*编译less任务,开发时使用*/
gulp.task('css:dev', function () {
  gulp.src(['./src/css/lib/**/*.less','./src/css/**/*.less'])
    .pipe(less({
      plugins: [autoprefix]
    }))
    .pipe(concat('main.css'))
    .pipe(cssBase64())
    .pipe(gulp.dest('./dist/css/'))
    .pipe(connect.reload());
});

/*编译less，压缩css任务，构建时使用*/
gulp.task('css:build', function () {
  gulp.src(['./src/css/lib/**/*.less','./src/css/**/*.less'])
    .pipe(less({
      plugins: [autoprefix]
    }))
    .pipe(concat('main.css'))
    .pipe(cssBase64())
    .pipe(gulp.dest('./dist/css/'))
    .pipe(cleanCSS({ debug: true }, function (details) {
      console.log(details.name + details.stats.originalSize);
      console.log(details.name + details.stats.minifiedSize);
    }))
    .pipe(rev()) //给文件添加hash编码
    .pipe(gulp.dest('./dist/css/'))
    .pipe(rev.manifest()) //生成rev-mainfest.json文件作为记录
    .pipe(gulp.dest('./rev/css'))
});

/*压缩图片任务*/
gulp.task('image', function () {
  gulp.src('./src/images/**/')
    .pipe(imagemin())
    .pipe(gulp.dest('./dist/images/'))
    .pipe(connect.reload());
});

/*删除文件夹*/
gulp.task('clean', function () {
  gulp.src(['./dist/*','./rev'], { read: false })
    .pipe(rimraf())
});

/*把html复制到目标文件夹里*/
gulp.task('html', function () {
  gulp.src('./src/**/*.html')
    .pipe(gulp.dest('./dist/'))
    .pipe(connect.reload());
});

/*把视频复制到目标文件夹里*/
gulp.task('video', function () {
  gulp.src('./src/video/**/*.*')
    .pipe(gulp.dest('./dist/video'))
    .pipe(connect.reload());
});

/*默认任务*/
gulp.task('default', ['script:dev', 'css:dev', 'image', 'video', 'html', 'connect'], function () {
  // 监视文件变动
  gulp.watch(['./src/js/**/*.js'], ['script:dev']);
  gulp.watch(['./src/css/**/*.less'], ['css:dev']);
  gulp.watch(['./src/**/*.html'], ['html']);
  gulp.watch(['./src/images/**/*'], ['image']);
  gulp.watch(['./src/video/**/*'], ['video']);
});

/*构建任务*/
gulp.task('build',['script:build', 'css:build', 'image','video'], function () {
  gulp.src(['./rev/**/*.json', './src/**/*.html'])
    .pipe(revCollector())
    .pipe(gulp.dest('./dist/'))
});
























